package com.demo.java.OD101_150.OD130;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【乱序整数序列 两数之和绝对值最小】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145725268
 */
public class OdMain {
    public static void solve(String inputValue) {
        // 初始化最小和为最大的可能值
        int sum = 65535 * 2;  // 最大的和的绝对值
        int[] indexArray = new int[2];  // 用于存储两个最小绝对值和的索引

        // 将输入字符串分割成数字
        String[] strArray = inputValue.split(" ");
        ArrayList<Integer> dataList = new ArrayList<>();

        // 将每个数字转换为整数并加入列表
        for (String s : strArray) {
            dataList.add(Integer.valueOf(s));
        }

        // 对数据列表进行排序
        dataList.sort(Comparator.naturalOrder());

        // 遍历所有可能的两数和，计算绝对值并更新最小值
        for (int i = 0; i < dataList.size(); ++i) {
            for (int j = i + 1; j < dataList.size(); ++j) {
                int disValue = Math.abs(dataList.get(i) + dataList.get(j));  // 计算两数之和的绝对值
                if (disValue < sum) {
                    sum = disValue;  // 更新最小和
                    indexArray[0] = i;
                    indexArray[1] = j;
                }
            }
        }

        // 输出结果：两个最小绝对值和的数字及其和
        System.out.println(dataList.get(indexArray[0]) + " "
                + dataList.get(indexArray[1]) + " " + sum);
    }

    public static void main(String[] args) {
        try {
            Scanner scan = new Scanner(System.in);
            String inputValue = scan.nextLine();  // 输入数字列表
            solve(inputValue);  // 调用求解方法
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("input error");
        }
    }
}